﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FlorDeLiz.BusinessLayer;
using FlorDeLiz.Utils;
using FlorDeLiz.BusinessEntitites;

namespace FlorDeLiz.Cadastro
{
    public partial class CadastroProduto : Form
    {
        public CadastroProduto()
        {
            InitializeComponent();
        }

        private void CadastroProduto_Load(object sender, EventArgs e)
        {
            CarregarGrid();            
        }

        private void LimparCampos()
        {
            txtCodigo.Text = string.Empty;
            txtCodigoProduto.Text = string.Empty;
            txtDescricao.Text = string.Empty;
            txtNomeProduto.Text = string.Empty;           
            txtQuantidade.Text = string.Empty;
            txtValor.Text = string.Empty;

            lblErrorCodigo.Visible = false;
            lblErrorNome.Visible = false;
            lblErrorQuantidade.Visible = false;
            lblErrorValor.Visible = false;
            
        }

        private void CarregarGrid()
        {
            produtoBindingSource.DataSource = ProdutoBL.Instancia.ObterProdutos(null, string.Empty, string.Empty, string.Empty);
            dgvProdutos.AutoGenerateColumns = false;
            dgvProdutos.DataSource = produtoBindingSource;
            dgvProdutos.ClearSelection();
        } 

        private void btnFechar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            LimparCampos();
            dgvProdutos.ClearSelection(); 
        }

        private void txtQuantidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !Util.Instancia.ValidarDigito(e.KeyChar);
        }

        private void txtValor_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !Util.Instancia.ValidarDigito(e.KeyChar);
            if (e.Handled)
            {
                if (!txtValor.Text.Contains(','))
                {
                    if (e.KeyChar == ',' || e.KeyChar == '.')
                    {
                        e.KeyChar = ',';
                    }
                    e.Handled = e.KeyChar != ',';
                }
            }
        }

        private void btnGravar_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                Produto produto = new Produto();
                int codigo = 0;
                int.TryParse(txtCodigo.Text, out codigo);
                produto.Id = codigo;
                produto.Nome = txtNomeProduto.Text.Trim().ToUpper();
                produto.Codigo = txtCodigoProduto.Text.Trim();
                int qtd = 0;
                int.TryParse(txtQuantidade.Text, out qtd);
                produto.Quantidade = qtd;
                decimal valor = 0m;
                decimal.TryParse(txtValor.Text, out valor);
                produto.Valor = valor;
                produto.Descricao = txtDescricao.Text.Trim().ToUpper();

                ProdutoBL.Instancia.GravarProduto(produto);
                CarregarGrid();
            }
        }

        private bool ValidarCampos()
        {
            StringBuilder sb = new StringBuilder();
            if (string.IsNullOrEmpty(txtNomeProduto.Text.Trim()))
            {
                sb.AppendLine("O campo Produto é obrigatório!");
                lblErrorNome.Visible = true;
            }

            if (string.IsNullOrEmpty(txtCodigoProduto.Text.Trim()))
            {
                sb.AppendLine("O campo Código é obrigatório!");
                lblErrorCodigo.Visible = true;
            }

            if (string.IsNullOrEmpty(txtQuantidade.Text.Trim()))
            {
                sb.AppendLine("O campo Quantidade é obrigatório!");
                lblErrorQuantidade.Visible = true;
            }        

            if (string.IsNullOrEmpty(txtValor.Text.Trim()))
            {
                sb.AppendLine("O campo Valor é obrigatório!");
                lblErrorValor.Visible = true;
            }
            
            if (!string.IsNullOrEmpty(sb.ToString()))
            {
                MessageBox.Show(sb.ToString(), "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }
            else
            {
                return true;
            }
        }

        private void dgvProdutos_SelectionChanged(object sender, EventArgs e)
        {
            if (dgvProdutos.SelectedRows.Count > 0)
            {
                Produto produto = (Produto)dgvProdutos.SelectedRows[0].DataBoundItem;

                if (produto != null)
                {
                    txtCodigo.Text = produto.Id.ToString();
                    txtNomeProduto.Text = produto.Nome;
                    txtCodigoProduto.Text = produto.Codigo;
                    txtQuantidade.Text = produto.Quantidade.ToString();
                    txtValor.Text = produto.Valor.ToString();
                    txtDescricao.Text = produto.Descricao;
                }
            }
            else
            {
                LimparCampos();
            }
        }

        private void txtPesquisa_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisa.Text.Trim()) && txtPesquisa.Text.Length >= 3)
            {
                List<Produto> produtos = new List<Produto>();
                produtos = ((List<Produto>)produtoBindingSource.DataSource).FindAll(p => p.Nome.ToUpper().Contains(txtPesquisa.Text.ToUpper().Trim()));
                dgvProdutos.DataSource = produtos;
            }
            else
            {
                dgvProdutos.DataSource = produtoBindingSource.DataSource;
            }
            dgvProdutos.ClearSelection();
        }       
    }
}
